home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Misc / vcrplus / decode.c < prev    next >
C/C++ Source or Header  |  1995-06-12  |  14KB  |  750 lines

  1. #include <stdio.h>
  2.  
  3. #define        KEY001    (68150631)
  4. #define        INVALID    (-987)
  5.  
  6.  
  7. /* function that performs initial scrambling */
  8. int    mixup(x, y)
  9.     int    x, y;
  10. {
  11.     int    i, j, k, sum;
  12.  
  13.     int    a[12], b[12], out[12] ;
  14.  
  15.     /* get the digits of x into a[] */
  16.     j = x ;
  17.     for(i=0; i<9; i++)
  18.     {
  19.         k = j % 10;
  20.         a[i] = k;
  21.         j = (j - k) / 10 ;
  22.     }
  23.  
  24.     /* get the digits of y into b[] */
  25.     j = y ;
  26.     for(i=0; i<9; i++)
  27.     {
  28.         k = j % 10;
  29.         b[i] = k;
  30.         j = (j - k) / 10 ;
  31.         out[i] = 0;
  32.     }
  33.  
  34.  
  35.     for(i=0; i<=8; i++)
  36.     {
  37.         for(j=0; j<=8; j++)
  38.         {
  39.             out[i+j] += (b[j] * a[i]) ;
  40.         }
  41.     }
  42.  
  43.     j = 1;
  44.     sum = 0;
  45.     for(i=0; i<=8; i++)
  46.     {
  47.         sum += j * (out[i] % 10);
  48.         j = j * 10 ;
  49.     }
  50.     return( sum ) ;
  51. }
  52.  
  53.  
  54.  
  55. /* first function */
  56. int    f1(inval)
  57.     int    inval ;
  58. {
  59.     int    ndigits, hashval ;
  60.     int    pwr ;
  61.  
  62.  
  63.     ndigits = 0;
  64.     pwr = 1;
  65.     while(inval >= pwr) { ndigits++; pwr *= 10; }
  66.     if(ndigits > 8) printf("\nPANIC: %d has %d digits\n", inval, ndigits);
  67.     pwr = pwr / 10 ;
  68.  
  69.     hashval = inval;
  70. again:    hashval = mixup(hashval, KEY001) % (pwr * 10) ;
  71.     if(hashval < pwr) goto again ;
  72.  
  73.     return(hashval);
  74. }
  75.  
  76.  
  77.  
  78.  
  79. /* the 512-entry tables of starting time and pgm duration */
  80. void    lookup(i, outtime, outdur)
  81.     int    i, *outtime, *outdur ;
  82. {
  83.     static    int    start[480], leng[480] ;
  84.     static    int    initializer = 0;
  85.  
  86.     int    j, s;
  87.  
  88.     if(initializer == 0) {
  89.     initializer = 1;
  90.  
  91.     for(j=0; j<512; j++) { start[j] = leng[j] = INVALID; }
  92.  
  93.     leng[0]   =  30 ;
  94.     leng[100] = 120 ;
  95.     leng[101] =  90 ;
  96.     leng[102] = 120 ;
  97.     leng[103] = 120 ;
  98.     leng[104] =  90 ;
  99.     leng[105] =  90 ;
  100.     leng[106] =  30 ;
  101.     leng[107] =  30 ;
  102.     leng[108] = 120 ;
  103.     leng[109] =  90 ;
  104.     leng[10]  =  30 ;
  105.     leng[110] =  90 ;
  106.     leng[111] =  30 ;
  107.     leng[112] =  90 ;
  108.     leng[113] =  30 ;
  109.     leng[114] =  30 ;
  110.     leng[115] = 120 ;
  111.     leng[116] =  30 ;
  112.     leng[117] = 120 ;
  113.     leng[118] = 120 ;
  114.     leng[119] =  30 ;
  115.     leng[11]  =  30 ;
  116.     leng[120] =  90 ;
  117.     leng[121] =  60 ;
  118.     leng[122] =  60 ;
  119.     leng[123] =  60 ;
  120.     leng[124] = 120 ;
  121.     leng[125] =  90 ;
  122.     leng[126] =  60 ;
  123.     leng[127] =  60 ;
  124.     leng[128] =  90 ;
  125.     leng[129] = 120 ;
  126.     leng[12]  =  30 ;
  127.     leng[130] = 120 ;
  128.     leng[131] =  90 ;
  129.     leng[132] =  60 ;
  130.     leng[133] =  60 ;
  131.     leng[134] = 120 ;
  132.     leng[135] =  90 ;
  133.     leng[136] =  90 ;
  134.     leng[137] = 120 ;
  135.     leng[138] = 120 ;
  136.     leng[139] =  60 ;
  137.     leng[13]  = 120 ;
  138.     leng[140] =  60 ;
  139.     leng[141] =  90 ;
  140.     leng[142] =  90 ;
  141.     leng[143] = 120 ;
  142.     leng[144] =  90 ;
  143.     leng[145] = 120 ;
  144.     leng[146] =  90 ;
  145.     leng[147] = 120 ;
  146.     leng[148] = 120 ;
  147.     leng[149] =  90 ;
  148.     leng[14]  =  30 ;
  149.     leng[150] = 120 ;
  150.     leng[151] =  90 ;
  151.     leng[152] =  90 ;
  152.     leng[153] =  90 ;
  153.     leng[154] =  60 ;
  154.     leng[155] =  60 ;
  155.     leng[156] = 120 ;
  156.     leng[157] =  60 ;
  157.     leng[158] =  60 ;
  158.     leng[159] =  60 ;
  159.     leng[15]  =  30 ;
  160.     leng[160] = 120 ;
  161.     leng[161] =  60 ;
  162.     leng[162] =  90 ;
  163.     leng[163] =  90 ;
  164.     leng[164] =  60 ;
  165.     leng[165] =  90 ;
  166.     leng[166] =  90 ;
  167.     leng[167] =  60 ;
  168.     leng[168] =  90 ;
  169.     leng[169] = 120 ;
  170.     leng[16]  = 120 ;
  171.     leng[170] =  60 ;
  172.     leng[171] = 120 ;
  173.     leng[172] =  60 ;
  174.     leng[173] =  60 ;
  175.     leng[174] = 120 ;
  176.     leng[175] =  90 ;
  177.     leng[176] =  60 ;
  178.     leng[177] = 120 ;
  179.     leng[178] =  60 ;
  180.     leng[179] =  60 ;
  181.     leng[17]  = 120 ;
  182.     leng[180] =  60 ;
  183.     leng[181] =  90 ;
  184.     leng[182] =  60 ;
  185.     leng[183] = 120 ;
  186.     leng[184] =  60 ;
  187.     leng[185] =  60 ;
  188.     leng[186] =  90 ;
  189.     leng[187] =  60 ;
  190.     leng[188] =  90 ;
  191.     leng[189] = 120 ;
  192.     leng[18]  =  60 ;
  193.     leng[190] =  90 ;
  194.     leng[191] =  90 ;
  195.     leng[19]  = 120 ;
  196.     leng[1]   =  30 ;
  197.     leng[20]  =  60 ;
  198.     leng[21]  =  60 ;
  199.     leng[22]  =  60 ;
  200.     leng[23]  = 120 ;
  201.     leng[24]  =  60 ;
  202.     leng[25]  = 120 ;
  203.     leng[26]  =  30 ;
  204.     leng[27]  =  30 ;
  205.     leng[28]  =  30 ;
  206.     leng[29]  =  60 ;
  207.     leng[2]   =  30 ;
  208.     leng[30]  =  90 ;
  209.     leng[31]  =  30 ;
  210.     leng[32]  =  30 ;
  211.     leng[33]  =  30 ;
  212.     leng[34]  =  30 ;
  213.     leng[35]  =  60 ;
  214.     leng[36]  =  30 ;
  215.     leng[37]  =  60 ;
  216.     leng[38]  = 120 ;
  217.     leng[39]  =  60 ;
  218.     leng[3]   =  30 ;
  219.     leng[40]  =  30 ;
  220.     leng[41]  =  30 ;
  221.     leng[42]  =  30 ;
  222.     leng[43]  =  30 ;
  223.     leng[44]  = 120 ;
  224.     leng[45]  =  30 ;
  225.     leng[46]  =  30 ;
  226.     leng[47]  =  30 ;
  227.     leng[48]  = 120 ;
  228.     leng[49]  =  30 ;
  229.     leng[4]   =  30 ;
  230.     leng[50]  =  60 ;
  231.     leng[51]  =  60 ;
  232.     leng[52]  =  30 ;
  233.     leng[53]  =  30 ;
  234.     leng[54]  = 120 ;
  235.     leng[55]  =  60 ;
  236.     leng[56]  =  60 ;
  237.     leng[57]  =  30 ;
  238.     leng[58]  = 120 ;
  239.     leng[59]  =  30 ;
  240.     leng[5]   =  30 ;
  241.     leng[60]  = 120 ;
  242.     leng[61]  = 120 ;
  243.     leng[62]  = 120 ;
  244.     leng[63]  =  30 ;
  245.     leng[64]  =  90 ;
  246.     leng[65]  =  30 ;
  247.     leng[66]  =  30 ;
  248.     leng[67]  =  30 ;
  249.     leng[68]  = 120 ;
  250.     leng[69]  =  90 ;
  251.     leng[6]   =  30 ;
  252.     leng[70]  =  90 ;
  253.     leng[71]  =  60 ;
  254.     leng[72]  =  90 ;
  255.     leng[73]  =  90 ;
  256.     leng[74]  =  90 ;
  257.     leng[75]  =  90 ;
  258.     leng[76]  =  90 ;
  259.     leng[77]  =  60 ;
  260.     leng[78]  =  90 ;
  261.     leng[79]  =  30 ;
  262.     leng[7]   =  30 ;
  263.     leng[80]  = 120 ;
  264.     leng[81]  =  60 ;
  265.     leng[82]  =  90 ;
  266.     leng[83]  = 120 ;
  267.     leng[84]  =  60 ;
  268.     leng[85]  =  60 ;
  269.     leng[86]  = 120 ;
  270.     leng[87]  =  30 ;
  271.     leng[88]  =  90 ;
  272.     leng[89]  = 120 ;
  273.     leng[8]   =  30 ;
  274.     leng[90]  = 120 ;
  275.     leng[91]  =  90 ;
  276.     leng[92]  =  90 ;
  277.     leng[93]  =  90 ;
  278.     leng[94]  =  90 ;
  279.     leng[95]  = 120 ;
  280.     leng[96]  =  60 ;
  281.     leng[97]  = 120 ;
  282.     leng[98]  =  90 ;
  283.     leng[99]  =  30 ;
  284.     leng[9]   =  60 ;
  285.     start[0]   = 1830 ;
  286.     start[100] =  330 ;
  287.     start[101] = 1500 ;
  288.     start[102] = 1500 ;
  289.     start[103] = 2300 ;
  290.     start[104] = 1900 ;
  291.     start[105] =  800 ;
  292.     start[106] =  430 ;
  293.     start[107] =  300 ;
  294.     start[108] = 1330 ;
  295.     start[109] = 1000 ;
  296.     start[10]  = 1400 ;
  297.     start[110] =  700 ;
  298.     start[111] =  100 ;
  299.     start[112] = 2330 ;
  300.     start[113] =  330 ;
  301.     start[114] =  200 ;
  302.     start[115] = 2230 ;
  303.     start[116] =  400 ;
  304.     start[117] =  600 ;
  305.     start[118] =  400 ;
  306.     start[119] =  230 ;
  307.     start[11]  = 2030 ;
  308.     start[120] =  630 ;
  309.     start[121] =   30 ;
  310.     start[122] = 2230 ;
  311.     start[123] =  100 ;
  312.     start[124] =   30 ;
  313.     start[125] = 2300 ;
  314.     start[126] = 1630 ;
  315.     start[127] =  830 ;
  316.     start[128] =    0 ;
  317.     start[129] = 1930 ;
  318.     start[12]  = 1700 ;
  319.     start[130] =  930 ;
  320.     start[131] = 2030 ;
  321.     start[132] =  500 ;
  322.     start[133] = 1730 ;
  323.     start[134] =  200 ;
  324.     start[135] = 1930 ;
  325.     start[136] =  930 ;
  326.     start[137] = 1730 ;
  327.     start[138] =  630 ;
  328.     start[139] = 1830 ;
  329.     start[13]  = 1600 ;
  330.     start[140] = 1430 ;
  331.     start[141] = 1130 ;
  332.     start[142] =   30 ;
  333.     start[143] =  830 ;
  334.     start[144] = 1030 ;
  335.     start[145] = 1430 ;
  336.     start[146] =  100 ;
  337.     start[147] =  730 ;
  338.     start[148] = 2030 ;
  339.     start[149] =  300 ;
  340.     start[14]  = 2000 ;
  341.     start[150] =  300 ;
  342.     start[151] = 1330 ;
  343.     start[152] = 1230 ;
  344.     start[153] =  230 ;
  345.     start[154] = 2130 ;
  346.     start[155] = 1130 ;
  347.     start[156] = 1830 ;
  348.     start[157] =  630 ;
  349.     start[158] =  530 ;
  350.     start[159] =  200 ;
  351.     start[15]  = 1500 ;
  352.     start[160] = 1530 ;
  353.     start[161] =  730 ;
  354.     start[162] =  600 ;
  355.     start[163] = 1730 ;
  356.     start[164] =  400 ;
  357.     start[165] =  730 ;
  358.     start[166] =  430 ;
  359.     start[167] =  430 ;
  360.     start[168] =  130 ;
  361.     start[169] = 1230 ;
  362.     start[16]  = 2000 ;
  363.     start[170] =  130 ;
  364.     start[171] =  230 ;
  365.     start[172] = 1930 ;
  366.     start[173] =  300 ;
  367.     start[174] = 1030 ;
  368.     start[175] =  200 ;
  369.     start[176] =  330 ;
  370.     start[177] =  500 ;
  371.     start[178] =  930 ;
  372.     start[179] =  230 ;
  373.     start[17]  = 2100 ;
  374.     start[180] = 2030 ;
  375.     start[181] =  400 ;
  376.     start[182] = 1530 ;
  377.     start[183] =  430 ;
  378.     start[184] = 1330 ;
  379.     start[185] = 1230 ;
  380.     start[186] =  330 ;
  381.     start[187] = 1030 ;
  382.     start[188] =  500 ;
  383.     start[189] =  530 ;
  384.     start[18]  = 2000 ;
  385.     start[190] =  530 ;
  386.     start[191] = 1100 ;
  387.     start[19]  = 1800 ;
  388.     start[1]   = 1600 ;
  389.     start[20]  = 1900 ;
  390.     start[21]  = 2200 ;
  391.     start[22]  = 2100 ;
  392.     start[23]  = 1400 ;
  393.     start[24]  = 1500 ;
  394.     start[25]  = 2200 ;
  395.     start[26]  = 1130 ;
  396.     start[27]  = 1100 ;
  397.     start[28]  = 2300 ;
  398.     start[29]  = 1600 ;
  399.     start[2]   = 1930 ;
  400.     start[30]  = 2100 ;
  401.     start[31]  = 2100 ;
  402.     start[32]  = 1230 ;
  403.     start[33]  = 1330 ;
  404.     start[34]  =  930 ;
  405.     start[35]  = 1300 ;
  406.     start[36]  = 2130 ;
  407.     start[37]  = 1200 ;
  408.     start[38]  = 1000 ;
  409.     start[39]  = 1800 ;
  410.     start[3]   = 1630 ;
  411.     start[40]  = 2200 ;
  412.     start[41]  = 1200 ;
  413.     start[42]  =  800 ;
  414.     start[43]  =  830 ;
  415.     start[44]  = 1700 ;
  416.     start[45]  =  900 ;
  417.     start[46]  = 2230 ;
  418.     start[47]  = 1030 ;
  419.     start[48]  = 1900 ;
  420.     start[49]  =  730 ;
  421.     start[4]   = 1530 ;
  422.     start[50]  = 2300 ;
  423.     start[51]  = 1000 ;
  424.     start[52]  =  700 ;
  425.     start[53]  = 1300 ;
  426.     start[54]  =  700 ;
  427.     start[55]  = 1100 ;
  428.     start[56]  = 1400 ;
  429.     start[57]  = 1000 ;
  430.     start[58]  =  800 ;
  431.     start[59]  = 2330 ;
  432.     start[5]   = 1730 ;
  433.     start[60]  = 1300 ;
  434.     start[61]  = 1200 ;
  435.     start[62]  =  900 ;
  436.     start[63]  =  630 ;
  437.     start[64]  = 1800 ;
  438.     start[65]  =  600 ;
  439.     start[66]  =  530 ;
  440.     start[67]  =    0 ;
  441.     start[68]  = 2330 ;
  442.     start[69]  = 2200 ;
  443.     start[6]   = 1800 ;
  444.     start[70]  = 1300 ;
  445.     start[71]  =  900 ;
  446.     start[72]  = 1630 ;
  447.     start[73]  = 1600 ;
  448.     start[74]  = 1430 ;
  449.     start[75]  = 2000 ;
  450.     start[76]  = 1830 ;
  451.     start[77]  =  600 ;
  452.     start[78]  = 1200 ;
  453.     start[79]  =   30 ;
  454.     start[7]   = 1430 ;
  455.     start[80]  =  130 ;
  456.     start[81]  =    0 ;
  457.     start[82]  = 1700 ;
  458.     start[83]  =    0 ;
  459.     start[84]  =  800 ;
  460.     start[85]  =  700 ;
  461.     start[86]  = 2130 ;
  462.     start[87]  =  500 ;
  463.     start[88]  = 1530 ;
  464.     start[89]  = 1130 ;
  465.     start[8]   = 1900 ;
  466.     start[90]  = 1100 ;
  467.     start[91]  =  830 ;
  468.     start[92]  = 2230 ;
  469.     start[93]  =  900 ;
  470.     start[94]  = 2130 ;
  471.     start[95]  = 1630 ;
  472.     start[96]  = 2330 ;
  473.     start[97]  =  100 ;
  474.     start[98]  = 1400 ;
  475.     start[99]  =  130 ;
  476.     start[9]   = 1700 ;
  477.  
  478.  
  479.     s = 2330;
  480.     for(j=192; j<240; j++)
  481.     { start[j] = s; leng[j] = 150; if(0==(j%2)) s-=30; else s-=70; }
  482.  
  483.     s = 2330;
  484.     for(j=240; j<288; j++)
  485.     { start[j] = s; leng[j] = 180; if(0==(j%2)) s-=30; else s-=70; }
  486.  
  487.     s = 2330;
  488.     for(j=288; j<336; j++)
  489.     { start[j] = s; leng[j] = 210; if(0==(j%2)) s-=30; else s-=70; }
  490.  
  491.     s = 2330;
  492.     for(j=336; j<384; j++)
  493.     { start[j] = s; leng[j] = 240; if(0==(j%2)) s-=30; else s-=70; }
  494.  
  495.     s = 2330;
  496.     for(j=384; j<432; j++)
  497.     { start[j] = s; leng[j] = 270; if(0==(j%2)) s-=30; else s-=70; }
  498.  
  499.     s = 2330;
  500.     for(j=432; j<480; j++)
  501.     { start[j] = s; leng[j] = 300; if(0==(j%2)) s-=30; else s-=70; }
  502.  
  503.     } /* end of initializer block */
  504.  
  505.  
  506.  
  507.     if((i >= 480) || (i < 0))
  508.         printf("\nPANIC, Illegal table index %d\n", i);
  509.  
  510.     fflush(stdout);
  511.     *outtime = (start[i]) ;
  512.     *outdur = (leng[i]) ;
  513.  
  514.     if( (*outtime == INVALID) || (*outdur == INVALID) )
  515.     {
  516.         printf("oops, I dont have an entry for index %d\n", i);
  517.         fflush(stdout);
  518.         *outtime = 0;
  519.         *outdur = 0;
  520.     }
  521. }
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528. void    bit_shuffle(t8c5, t2c1, tval, cval)
  529.     int    t8c5, t2c1;
  530.     int    *tval, *cval ;
  531. {
  532.     int    tt, cc, b;
  533.  
  534.     tt = 0 ;
  535.     cc = 0 ;
  536.  
  537.     /* get t8 thru t3 */
  538.     b = 0x00000001 & (t8c5 >> 9) ;
  539.     tt += (b << 8);
  540.  
  541.     b = 0x00000001 & (t8c5 >> 7) ;
  542.     tt += (b << 7);
  543.  
  544.     b = 0x00000001 & (t8c5 >> 5) ;
  545.     tt += (b << 6);
  546.  
  547.     b = 0x00000001 & (t8c5 >> 4) ;
  548.     tt += (b << 5);
  549.  
  550.     b = 0x00000001 & (t8c5 >> 3) ;
  551.     tt += (b << 4);
  552.  
  553.     b = 0x00000001 & t8c5 ;
  554.     tt += (b << 3);
  555.  
  556.  
  557.     /* get c5 thru c2 */
  558.     b = 0x00000001 & (t8c5 >> 8) ;
  559.     cc += (b << 5);
  560.  
  561.     b = 0x00000001 & (t8c5 >> 6) ;
  562.     cc += (b << 4);
  563.  
  564.     b = 0x00000001 & (t8c5 >> 2) ;
  565.     cc += (b << 3);
  566.  
  567.     b = 0x00000001 & (t8c5 >> 1) ;
  568.     cc += (b << 2) ;
  569.  
  570.  
  571.     /* get t2 thru t0 */
  572.     b = 0x00000001 & (t2c1 >> 4) ;
  573.     tt += (b << 2);
  574.  
  575.     b = 0x00000001 & (t2c1 >> 2) ;
  576.     tt += (b << 1);
  577.  
  578.     b = 0x00000001 & t2c1 ;
  579.     tt += b;
  580.  
  581.  
  582.     /* get c1 thru c0 */
  583.     b = 0x00000001 & (t2c1 >> 3) ;
  584.     cc += (b << 1);
  585.  
  586.     b = 0x00000001 & (t2c1 >> 1) ;
  587.     cc += b ;
  588.  
  589.     *tval = tt;
  590.     *cval = cc;
  591. }
  592.  
  593.  
  594.  
  595.  
  596.  
  597. int    map_top(day, year, top, digits)
  598.     int    day, year, top, digits ;
  599. {
  600.     int    d2, d1, d0, y, poot ;
  601.     int    n2, n1, n0, f3, f2, f1, f0;
  602.  
  603.     y = year % 16 ;
  604.     d2 = top / 100 ;
  605.     d1 = (top % 100) / 10 ;
  606.     d0 = top % 10 ;
  607.  
  608.     f0 = 1;
  609.     f1 = (y + 1) % 10;
  610.     f2 = ( ((y+1)*(y+2)) / 2 ) % 10 ;
  611.     f3 = ( ((y+1)*(y+2)*(y+3)) / 6 ) % 10 ;
  612.  
  613.  
  614.     if(digits == 1)
  615.     {
  616.         n0 = ( (d0*f0) + (day*f1) ) % 10 ;
  617.         n1 = 0;
  618.         n2 = 0;
  619.     }
  620.  
  621.     if(digits == 2)
  622.     {
  623.         n0 = ( (d0*f0) + (d1*f1) + (day*f2) ) % 10 ;
  624.         n1 = ( (d1*f0) + (day*f1) ) % 10 ;
  625.         n2 = 0;
  626.     }
  627.  
  628.     if(digits == 3)
  629.     {
  630.         n0 = ( (d0*f0) + (d1*f1) + (d2*f2) + (day*f3) ) % 10 ;
  631.         n1 = ( (d1*f0) + (d2*f1) + (day*f2) ) % 10 ;
  632.         n2 = ( (d2*f0) + (day*f1) ) % 10 ;
  633.     }
  634.  
  635.  
  636.     poot =  (100*n2) + (10*n1) + n0 ;
  637.  
  638.     return( poot );
  639. }
  640.  
  641.  
  642.  
  643.  
  644.  
  645. void    offset(day, year, top, ofout, topout)
  646.     int    day, year, top ;
  647.     int    *ofout, *topout ;
  648. {
  649.     int    i, t, tx, off, digits, burp;
  650.     int    pwr ;
  651.  
  652.     pwr = 1 ; digits = 0;
  653.     while(top >= pwr) { digits++; pwr *= 10; }
  654.     pwr = pwr / 10 ;
  655.  
  656.     t = tx = top ;
  657.     off = 0;
  658.     while(tx > 0) { off += (tx % 10);   tx /= 10; }
  659.  
  660. again:
  661.     for(i=0; i<=(year%16); i++)
  662.         {
  663.         burp = ( (map_top(day, i, t, digits)) % 10 ) ;
  664.         off += burp ;
  665.         }
  666.  
  667.     t = map_top(day, year, t, digits) ;
  668.     if(t < pwr) goto again ;
  669.  
  670.  
  671.     *ofout = (off % 32) ;
  672.     *topout = (t) ;
  673. }
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684. main(argc, argv)
  685.     int    argc;
  686.     char    *argv[];
  687. {
  688.     int    newspaper ;
  689.     int    s1_out, bot3, top5, quo, rem ;
  690.     int    s5_out, mtout, ofout, tval, cval ;
  691.     int    date_today, month_today, year_today ;
  692.     int    day_out, channel_out;
  693.     int    starttime_out, duration_out ;
  694.  
  695.  
  696.  
  697.     if(argc == 5) goto clean;
  698.  
  699. upchuck:
  700.     printf("Usage: %s  todays_month  todays_day  todays_year   Code_value_in_newspaper\n",
  701.         argv[0]);
  702.     exit(-1) ;
  703.  
  704.  
  705.  
  706. clean:
  707.  
  708.     month_today = atoi(argv[1]);
  709.     date_today = atoi(argv[2]);
  710.     year_today = atoi(argv[3]);
  711.     newspaper = atoi(argv[4]);
  712.  
  713.     year_today = year_today % 100 ;
  714.  
  715.  
  716.     if( (month_today>12) || (month_today<1) || (date_today<1) || (date_today>31) )
  717.     { printf("Invalid date\n"); goto upchuck; }
  718.  
  719.     if((newspaper < 1) || (newspaper > 999999))
  720.     { printf("Sorry, I cant process that code value\n  I can only do codes with 6 digits or fewer\n"); goto upchuck; }
  721.  
  722.  
  723.  
  724.  
  725.     ofout = INVALID ;
  726.     mtout = INVALID ;
  727.  
  728.     s1_out = f1(newspaper); 
  729.     bot3 = s1_out % 1000;
  730.     top5 = s1_out / 1000;
  731.     quo = (bot3 - 1) / 32 ;
  732.     rem = (bot3 - 1) % 32 ;
  733.     day_out = quo + 1;
  734.  
  735.     if(newspaper >= 1000)
  736.         offset(day_out, year_today, top5, (&ofout), (&mtout)) ;
  737.     else { mtout = 0; ofout = 0; }
  738.  
  739.     s5_out = (rem + (day_out*(month_today+1)) + ofout) % 32 ;
  740.  
  741.  
  742.     bit_shuffle(mtout, s5_out, &tval, &cval);
  743.     channel_out = cval + 1;
  744.     lookup(tval, (&starttime_out), (&duration_out));
  745.  
  746.     printf("Code= %6d    %2d  %2d  %2d   Mapped_channel= %2d  Start_time= %4d  Length= %3d\n",
  747.         newspaper, month_today, day_out, year_today, channel_out, starttime_out, duration_out);
  748.  
  749. }
  750.